home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / pascal / turbcas.exe / TURBOCAS.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1991-07-10  |  22.0 KB  |  781 lines

  1.                       (***********************)
  2.                       (*      TURBO CAS      *)
  3.                       (*     Version 1.0     *)
  4.                       (*  Turbo Pascal Unit  *)
  5.                       (*     Supporting      *)
  6.                       (*    the DCA/Intel    *)
  7.                       (*         CAS         *)
  8.                       (***********************)
  9.                       (*    Public Domain    *)
  10.                       (*    by  Brian Corll  *)
  11.                       (***********************)
  12.                       (* ALL RIGHTS RESERVED *)
  13.                       (***********************)
  14.                       (*  Portions Copyright *)
  15.                       (*     1988,1989 by    *)
  16.                       (*       DCA/Intel     *)
  17.                       (***********************)
  18.  
  19. (* CAS stands for Communicating Application Specification *)
  20. (* CAS is Copyright 1988,1989 DCA/Intel                   *)
  21. {$F+,O+}
  22.  
  23. { This unit provides Turbo Pascal access to FAX cards such as Intel's
  24.   Connection CoProcessor or similar cards which adhere to the DCA/Intel CAS }
  25.  
  26. UNIT TurboCAS;
  27.  
  28. INTERFACE
  29.  
  30. USES DOS;
  31.  
  32. TYPE
  33.  
  34.    EventTypes = (Completed,Pending,Dialed,Sending,
  35.                  Receiving,Aborted,NoStatus);
  36.    CFEventType = (CFSend,CFReceive,CFPolledSend,CFPolledReceive);
  37.    Directions = (Fore,Back);
  38.    QueueTypes = (Task,Receive,Log);
  39.  
  40.    FileName = String[79];
  41.    FileNameArray = ARRAY[1..10] OF FileName;
  42.    Str32 = String[32];
  43.    Str80 = String[80];
  44.    Str47 = String[47];
  45.  
  46.    CoverPageType = ARRAY[1..240] OF CHAR;
  47.  
  48.    CFRPtr = ^ControlFileRecordType;
  49.    ControlFileRecordType = RECORD
  50.         EventType      : BYTE;{User-defined}
  51.         TransType      : BYTE;{User-defined}
  52.         Status         : INTEGER;
  53.         SendTime       : WORD;{User-defined}
  54.         SendDate       : WORD;{User-defined}
  55.         NumberOfFiles  : INTEGER;{User-defined}
  56.         FTROffset      : WORD;{User-defined}
  57.         PhoneNo        : ARRAY[1..47] OF CHAR;{User-defined}
  58.         TagField       : ARRAY[1..64] OF CHAR;
  59.         Unused1        : BYTE;{User-defined}
  60.         CallSecs       : BYTE;
  61.         CallMins       : BYTE;
  62.         CallHrs        : BYTE;
  63.         TotPages       : LONGINT;
  64.         NumPagesSent   : LONGINT;
  65.         NumFilesSent   : WORD;
  66.         CoverFlag      : BYTE;{User-defined}
  67.         NumErrors      : WORD;
  68.         Unused2        : ARRAY[1..78] OF BYTE;{User-defined}
  69.         CSID           : ARRAY[1..21] OF CHAR;
  70.         Dest           : ARRAY[1..32] OF CHAR;{User-defined}
  71.         Sender         : ARRAY[1..32] OF CHAR;{User-defined}
  72.         PCXFile        : ARRAY[1..80] OF CHAR;{User-defined}
  73.         END;
  74.  
  75.    FTRPtr = ^FileTransferRecordType;
  76.    FileTransferRecordType = RECORD
  77.         FAXType       : BYTE;
  78.         TextSize      : BYTE;
  79.         Status        : BYTE;
  80.         BytesTrans    : LONGINT;
  81.         SizeOfFile    : LONGINT;
  82.         NumPagesTrans : INTEGER;
  83.         NumPagesTot   : INTEGER;
  84.         FAXFileName   : ARRAY[1..80] OF CHAR;
  85.         Increments    : BYTE;
  86.         Inches        : CHAR;
  87.         Reserved      : ARRAY[1..31] OF CHAR;
  88.         END;
  89.  
  90.    EDBPtr = ^ExternalDataBlock;
  91.    ExternalDataBlock = RECORD
  92.         CASMajor : BYTE;
  93.         CASMinor : BYTE;
  94.         ManagerPath : ARRAY[1..68] OF CHAR;
  95.         PBookName : ARRAY[1..13] OF CHAR;
  96.         LogoName  : ARRAY[1..13] OF CHAR;
  97.         Sender    : ARRAY[1..32] OF CHAR;
  98.         CSID      : ARRAY[1..21] OF CHAR;
  99.         Reserved  : ARRAY[1..107] OF BYTE;
  100.         END;
  101.  
  102.    SARPtr = ^StatusAreaRecord;
  103.    StatusAreaRecord = RECORD
  104.         EventType      : BYTE;{User-defined}
  105.         TransType      : BYTE;{User-defined}
  106.         Status         : INTEGER;
  107.         SendTime       : WORD;{User-defined}
  108.         SendDate       : WORD;{User-defined}
  109.         NumberOfFiles  : INTEGER;{User-defined}
  110.         FTROffset      : INTEGER;{User-defined}
  111.         PhoneNo        : ARRAY[1..47] OF CHAR;{User-defined}
  112.         TagField       : ARRAY[1..64] OF CHAR;
  113.         Unused1        : BYTE;{User-defined}
  114.         CallSecs       : BYTE;
  115.         CallMins       : BYTE;
  116.         CallHrs        : BYTE;
  117.         TotPages       : LONGINT;
  118.         NumPagesSent   : LONGINT;
  119.         NumFilesSent   : INTEGER;
  120.         CoverFlag      : BYTE;{User-defined}
  121.         NumErrors      : INTEGER;
  122.         Unused2        : ARRAY[1..78] OF BYTE;{User-defined}
  123.         CSID           : ARRAY[1..21] OF BYTE;
  124.         Dest           : ARRAY[1..32] OF CHAR;{User-defined}
  125.         Sender         : ARRAY[1..32] OF CHAR;{User-defined}
  126.         PCXFile        : ARRAY[1..80] OF CHAR;{User-defined}
  127.         FAXType        : BYTE;
  128.         TextSize       : BYTE;
  129.         FTRStatus      : BYTE;
  130.         BytesTrans     : LONGINT;
  131.         SizeOfFile     : LONGINT;
  132.         NumPagesTrans  : INTEGER;
  133.         NumPagesTot    : INTEGER;
  134.         FAXFileName    : ARRAY[1..80] OF CHAR;
  135.         Increments     : BYTE;
  136.         Inches         : BYTE;
  137.         Reserved       : ARRAY[1..31] OF BYTE;
  138.         END;
  139.  
  140. VAR
  141.    CASError : WORD;
  142.    AutoState : BYTE;
  143.    EDB : EDBPtr;
  144.    CFR : CFRPtr;
  145.    FTR : FTRPtr;
  146.    SAR : SARPtr;
  147.    ControlFile : FILE;
  148.    FileList : FileNameArray;
  149.  
  150.  
  151. FUNCTION ManagerInstalled : BOOLEAN;
  152. {CAS Function 00h}
  153.  
  154. FUNCTION SubmitTask(ControlFileName : FileName) : INTEGER;
  155. {CAS Function 01h}
  156.  
  157. PROCEDURE AbortCurrentEvent;
  158. {CAS Function 02h}
  159.  
  160. PROCEDURE FindFirstQEntry(EType : EventTypes;Direction : Directions;
  161.           QueueType : QueueTypes;VAR EventHandle : INTEGER);
  162. {CAS Function 05h}
  163.  
  164. PROCEDURE FindNextQEntry(QueueType : QueueTypes;VAR EventHandle : INTEGER);
  165. {CAS Function 06h}
  166.  
  167. PROCEDURE OpenFile(QueueType : QueueTypes;VAR EventHandle : INTEGER;
  168.              FileNumber : INTEGER;VAR DOSHandle : INTEGER);
  169. {CAS Function 07h}
  170.  
  171. PROCEDURE DeleteFile(QueueType : QueueTypes;VAR EventHandle : INTEGER;
  172.              FileNumber : INTEGER);
  173. {CAS Function 08h}
  174.  
  175. PROCEDURE DeleteAllFiles(QueueType : QueueTypes);
  176. {CAS Function 09h}
  177.  
  178. PROCEDURE GetEventDate(QueueType : QueueTypes;VAR EventHandle : INTEGER;
  179.              VAR Year : INTEGER;VAR Month,Day : BYTE);
  180. {CAS Function 0Ah}
  181.  
  182. PROCEDURE SetTaskDate(VAR EventHandle : INTEGER;VAR Year : INTEGER;
  183.              VAR Month,Day : BYTE);
  184. {CAS Function 0Bh}
  185.  
  186. PROCEDURE GetEventTime(VAR Hour,Minutes,Secs : BYTE;EventHandle : INTEGER;
  187.              QueueType : QueueTypes);
  188. {CAS Function 0Ch}
  189.  
  190. PROCEDURE SetTaskTime(VAR Hour,Minutes,Secs : BYTE;VAR EventHandle : INTEGER);
  191. {CAS Function 0Dh}
  192.  
  193. PROCEDURE GetEDB;
  194. {CAS Function 0Eh}
  195.  
  196. PROCEDURE DisposeEDB(VAR EDB : EDBPtr);
  197.  
  198. PROCEDURE GetAutoReceiveState;
  199. {CAS Function 0Fh}
  200.  
  201. PROCEDURE SetAutoReceiveState(NumberOfRings : BYTE);
  202. {CAS Function 0Fh}
  203.  
  204. PROCEDURE GetCurrentEventStatus;
  205. {CAS Function 10h}
  206.  
  207. PROCEDURE DisposeSAR;
  208.  
  209. PROCEDURE GetQueueStatus(VAR NumChanges,NumFiles,NumReceived : INTEGER;
  210.           QueueType : QueueTypes);
  211. {CAS Function 11h}
  212.  
  213. PROCEDURE RunDiagnostics;
  214. {CAS Function 13h}
  215.  
  216. PROCEDURE MoveFile(VAR FName : FileName;VAR EventHandle : INTEGER;
  217.               VAR FileNumber : INTEGER);
  218. {CAS Function 14h}
  219.  
  220. PROCEDURE SendSingleFile(D : Str32;S : Str80;P : Str47);
  221. {CAS Function 15h}
  222.  
  223. PROCEDURE RemoveManager;
  224. {CAS Function 16h}
  225.  
  226. FUNCTION CreateControlFile(CFEvent : CFEventType;TransferType : BYTE;
  227.          CFRTime : WORD;CFRDate : WORD;NumFiles : INTEGER;Phone : Str47;
  228.          CoverPageFlag : BYTE;Destination : Str32;SenderName : Str32;
  229.          LogoName : Str80;VAR CoverPageText : CoverPageType) : FileName;
  230.  
  231. FUNCTION DOSTime(Hour,Minutes,Seconds : WORD) : WORD;
  232.  
  233. FUNCTION DOSDate(Month,Day,Year : WORD) : WORD;
  234.  
  235. IMPLEMENTATION
  236.  
  237. CONST
  238.    MUX = $CB;
  239.  
  240. TYPE
  241.  
  242.    LIT = RECORD
  243.        HI,LO : WORD;
  244.        END;
  245.  
  246.    FDAPtr = ^FAXDataArea;
  247.    FAXDataArea = RECORD
  248.         TransType : BYTE;
  249.         TextSize  : BYTE;
  250.         SendTime  : INTEGER;
  251.         SendDate  : INTEGER;
  252.         Dest      : ARRAY[1..32] OF CHAR;
  253.         SendFile  : ARRAY[1..80] OF CHAR;
  254.         Phone     : ARRAY[1..47] OF CHAR;
  255.         TagField  : ARRAY[1..64] OF CHAR;
  256.         Reserved1 : BYTE;
  257.         CoverFlag : BYTE;
  258.         Reserved2 : ARRAY[1..23] OF BYTE;
  259.         CoverPage : CoverPageType;
  260.         END;
  261.  
  262.  
  263.  
  264. VAR
  265.    Regs : Registers;
  266.    FDA : FDAPtr;
  267.  
  268.    FUNCTION CheckError : WORD;
  269.    VAR
  270.       L : LONGINT;
  271.    BEGIN
  272.         L := LONGINT(-Regs.AX);
  273.         CheckError := LIT(L).LO;
  274.    END;
  275.  
  276.  
  277.    FUNCTION ManagerInstalled : BOOLEAN;
  278.    {CAS Function 00h}
  279.    BEGIN
  280.         WITH Regs DO
  281.         BEGIN
  282.              AH := MUX;
  283.              AL := $00;
  284.              Intr($2F,Regs);
  285.              ManagerInstalled := (AL = $FF);
  286.         END;
  287.    END;
  288.  
  289.    FUNCTION SubmitTask(ControlFileName : FileName) : INTEGER;
  290.    {CAS Function 01h}
  291.    VAR
  292.       TCFName : ARRAY[1..80] OF CHAR;
  293.       X : BYTE;
  294.    BEGIN
  295.         FillChar(TCFName,SizeOf(TCFName),#0);
  296.         FOR X := 1 TO Length(ControlFilename) DO
  297.              TCFName[X] := ControlFileName[X];
  298.         WITH Regs DO
  299.         BEGIN
  300.              AH := MUX;
  301.              AL := $01;
  302.              DS := Seg(TCFName);
  303.              DX := Ofs(TCFName);
  304.              Intr($2F,Regs);
  305.              IF AX < 32767 THEN
  306.              BEGIN
  307.                 CASError := 0;
  308.                 SubmitTask := AX;
  309.                 EXIT;
  310.              END
  311.              ELSE
  312.              BEGIN
  313.                 CASError := CheckError;
  314.                 SubmitTask := -1;
  315.                 EXIT;
  316.              END;
  317.         END;
  318.    END;
  319.  
  320.    PROCEDURE AbortCurrentEvent;
  321.    {CAS Function 02h}
  322.    BEGIN
  323.         WITH Regs DO
  324.         BEGIN
  325.              AH := MUX;
  326.              AL := $02;
  327.              Intr($2F,Regs);
  328.              CASError := CheckError;
  329.         END;
  330.    END;
  331.  
  332.    PROCEDURE FindFirstQEntry(EType : EventTypes;Direction : Directions;
  333.              QueueType : QueueTypes;VAR EventHandle : INTEGER);
  334.    {CAS Function 05h}
  335.    BEGIN
  336.         WITH Regs DO
  337.         BEGIN
  338.              AH := MUX;
  339.              AL := $05;
  340.              CASE EType OF
  341.                   Completed : CX := 0;
  342.                   Pending   : CX := 1;
  343.                   Dialed    : CX := 2;
  344.                   Sending   : CX := 3;
  345.                   Receiving : CX := 4;
  346.                   Aborted   : CX := 5;
  347.              END;
  348.              CASE Direction OF
  349.                   Fore      : DH := 0;
  350.                   Back      : DH := 1;
  351.              END;
  352.              CASE QueueType OF
  353.                   Task      : DL := 0;
  354.                   Receive   : DL := 1;
  355.                   Log       : DL := 2;
  356.              END;
  357.              Intr($2F,Regs);
  358.              CASError := CheckError;
  359.              EventHandle := BX;
  360.         END;
  361.    END;
  362.  
  363.    PROCEDURE FindNextQEntry(QueueType : QueueTypes;VAR EventHandle : INTEGER);
  364.    {CAS Function 06h}
  365.    BEGIN
  366.         WITH Regs DO
  367.         BEGIN
  368.              AH := MUX;
  369.              AL := $06;
  370.              CASE QueueType OF
  371.                   Task      : DL := 0;
  372.                   Receive   : DL := 1;
  373.                   Log       : DL := 2;
  374.              END;
  375.              Intr($2F,Regs);
  376.              CASError := CheckError;
  377.              EventHandle := BX;
  378.         END;
  379.    END;
  380.  
  381.    PROCEDURE OpenFile(QueueType : QueueTypes;VAR EventHandle : INTEGER;
  382.              FileNumber : INTEGER;VAR DOSHandle : INTEGER);
  383.    {CAS Function 07h}
  384.    BEGIN
  385.         WITH Regs DO
  386.         BEGIN
  387.              AH := MUX;
  388.              AL := $07;
  389.              BX := EventHandle;
  390.              CX := FileNumber;
  391.              CASE QueueType OF
  392.                   Task      : DL := 0;
  393.                   Receive   : DL := 1;
  394.                   Log       : DL := 2;
  395.              END;
  396.              Intr($2F,Regs);
  397.              CASError := CheckError;
  398.              DOSHandle := BX;
  399.         END;
  400.    END;
  401.  
  402.    PROCEDURE DeleteFile(QueueType : QueueTypes;VAR EventHandle : INTEGER;
  403.              FileNumber : INTEGER);
  404.    {CAS Function 08h}
  405.    BEGIN
  406.         WITH Regs DO
  407.         BEGIN
  408.              AH := MUX;
  409.              AL := $08;
  410.              BX := EventHandle;
  411.              CX := FileNumber;
  412.              CASE QueueType OF
  413.                   Task      : DL := 0;
  414.                   Receive   : DL := 1;
  415.                   Log       : DL := 2;
  416.              END;
  417.              Intr($2F,Regs);
  418.              CASError := CheckError;
  419.         END;
  420.    END;
  421.  
  422.    PROCEDURE DeleteAllFiles(QueueType : QueueTypes);
  423.    {CAS Function 09h}
  424.    BEGIN
  425.         WITH Regs DO
  426.         BEGIN
  427.              AH := MUX;
  428.              AL := $09;
  429.              CASE QueueType OF
  430.                   Task      : DL := 0;
  431.                   Receive   : DL := 1;
  432.                   Log       : DL := 2;
  433.              END;
  434.              Intr($2F,Regs);
  435.              CASError := CheckError;
  436.         END;
  437.    END;
  438.  
  439.    PROCEDURE GetEventDate(QueueType : QueueTypes;VAR EventHandle : INTEGER;
  440.              VAR Year : INTEGER;VAR Month,Day : BYTE);
  441.    {CAS Function 0Ah}
  442.    BEGIN
  443.         WITH Regs DO
  444.         BEGIN
  445.              AH := MUX;
  446.              AL := $0A;
  447.              BX := EventHandle;
  448.              CASE QueueType OF
  449.                   Task      : DL := 0;
  450.                   Receive   : DL := 1;
  451.                   Log       : DL := 2;
  452.              END;
  453.              Intr($2F,Regs);
  454.              CASError := CheckError;
  455.              Year := CX;
  456.              Month := DH;
  457.              Day := DL;
  458.         END;
  459.    END;
  460.  
  461.    PROCEDURE SetTaskDate(VAR EventHandle : INTEGER;VAR Year : INTEGER;
  462.              VAR Month,Day : BYTE);
  463.    {CAS Function 0Bh}
  464.    BEGIN
  465.         WITH Regs DO
  466.         BEGIN
  467.              AH := MUX;
  468.              AL := $0B;
  469.              BX := EventHandle;
  470.              CX := Year;
  471.              DH := Month;
  472.              DL := Day;
  473.              Intr($2F,Regs);
  474.              CASError := CheckError;
  475.         END;
  476.    END;
  477.  
  478.    PROCEDURE GetEventTime(VAR Hour,Minutes,Secs : BYTE;EventHandle : INTEGER;
  479.              QueueType : QueueTypes);
  480.    {CAS Function 0Ch}
  481.    BEGIN
  482.         WITH Regs DO
  483.         BEGIN
  484.              AH := MUX;
  485.              AL := $0C;
  486.              BX := EventHandle;
  487.              CASE QueueType OF
  488.                   Task      : DL := 0;
  489.                   Receive   : DL := 1;
  490.                   Log       : DL := 2;
  491.              END;
  492.              Intr($2F,Regs);
  493.              CASError := CheckError;
  494.              Hour := CH;
  495.              Minutes := CL;
  496.              Secs := DH;
  497.         END;
  498.    END;
  499.  
  500.  
  501.    PROCEDURE SetTaskTime(VAR Hour,Minutes,Secs : BYTE;VAR EventHandle : INTEGER);
  502.    {CAS Function 0Dh}
  503.    BEGIN
  504.         WITH Regs DO
  505.         BEGIN
  506.              AH := MUX;
  507.              AL := $0D;
  508.              BX := EventHandle;
  509.              CH := Hour;
  510.              CL := Minutes;
  511.              DH := Secs;
  512.              Intr($2F,Regs);
  513.              CASError := CheckError;
  514.         END;
  515.    END;
  516.  
  517.    PROCEDURE GetEDB;
  518.    {CAS Function 0Eh}
  519.    BEGIN
  520.         NEW(EDB);
  521.         FillChar(EDB^,SizeOf(EDB^),#0);
  522.         WITH Regs DO
  523.         BEGIN
  524.              AH := MUX;
  525.              AL := $0E;
  526.              DS := Seg(EDB^);
  527.              DX := Ofs(EDB^);
  528.              Intr($2F,Regs);
  529.         END;
  530.    END;
  531.  
  532.    PROCEDURE DisposeEDB(VAR EDB : EDBPtr);
  533.    BEGIN
  534.         DISPOSE(EDB);
  535.         EDB := NIL;
  536.    END;
  537.  
  538.    PROCEDURE GetAutoReceiveState;
  539.    {CAS Function 0Fh}
  540.    BEGIN
  541.         WITH Regs DO
  542.         BEGIN
  543.            AH := MUX;
  544.            AL := $0F;
  545.            DL := 0;
  546.            Intr($2F,Regs);
  547.            AutoState := AX;
  548.         END;
  549.    END;
  550.  
  551.    PROCEDURE SetAutoReceiveState(NumberOfRings : BYTE);
  552.    {CAS Function 0Fh}
  553.    BEGIN
  554.         WITH Regs DO
  555.         BEGIN
  556.            AH := MUX;
  557.            AL := $0F;
  558.            DL := 1;
  559.            DH := NumberOfRings;
  560.            Intr($2F,Regs);
  561.            AutoState := AX;
  562.         END;
  563.    END;
  564.  
  565.  
  566.  
  567.    PROCEDURE GetCurrentEventStatus;
  568.    {CAS Function 10h}
  569.    BEGIN
  570.         NEW(SAR);
  571.         WITH Regs DO
  572.         BEGIN
  573.              AH := MUX;
  574.              AL := $10;
  575.              DS := Seg(SAR);
  576.              DX := Ofs(SAR);
  577.              Intr($2F,Regs);
  578.              CASError := CheckError;
  579.         END;
  580.    END;
  581.  
  582.    PROCEDURE DisposeSAR;
  583.    BEGIN
  584.         DISPOSE(SAR);
  585.    END;
  586.  
  587.  
  588.    PROCEDURE GetQueueStatus(VAR NumChanges,NumFiles,NumReceived : INTEGER;
  589.              QueueType : QueueTypes);
  590.    {CAS Function 11h}
  591.    BEGIN
  592.         WITH Regs DO
  593.         BEGIN
  594.              AH := MUX;
  595.              AL := $11;
  596.              CASE QueueType OF
  597.                   Task      : DL := 0;
  598.                   Receive   : DL := 1;
  599.                   Log       : DL := 2;
  600.              END;
  601.              Intr($2F,Regs);
  602.              NumChanges := AX;
  603.              NumFiles := BX;
  604.              NumReceived := CX;
  605.         END;
  606.    END;
  607.  
  608.     PROCEDURE RunDiagnostics;
  609.     {CAS Function 13h}
  610.     BEGIN
  611.          WITH Regs DO
  612.          BEGIN
  613.               AH := MUX;
  614.               AL := $13;
  615.               DL := $01;
  616.               Intr($2F,Regs);
  617.               CASError := CheckError;
  618.          END;
  619.     END;
  620.  
  621.     PROCEDURE MoveFile(VAR FName : FileName;VAR EventHandle : INTEGER;
  622.               VAR FileNumber : INTEGER);
  623.     {CAS Function 14h}
  624.     BEGIN
  625.          WITH Regs DO
  626.          BEGIN
  627.               AH := MUX;
  628.               AL := $14;
  629.               BX := EventHandle;
  630.               CX := FileNumber;
  631.               DS := Seg(FName);
  632.               DX := Ofs(FName);
  633.               Intr($2F,Regs);
  634.               CASError := CheckError;
  635.          END;
  636.     END;
  637.  
  638.     PROCEDURE SendSingleFile(D : Str32;S : Str80;P : Str47);
  639.     {CAS Function 15h}
  640.     VAR
  641.       X : BYTE;
  642.     BEGIN
  643.         NEW(FDA);
  644.         WITH FDA^ DO
  645.         BEGIN
  646.              TransType := 0;
  647.              TextSize := 0;
  648.              SendTime := 0;
  649.              SendDate := 0;
  650.              FillChar(Dest,SizeOf(Dest),#0);
  651.              FillChar(SendFile,SizeOf(SendFile),#0);
  652.              FillChar(Phone,SizeOf(Phone),#0);
  653.              FOR X := 1 TO Length(D) DO
  654.                  Dest[X] := D[X];
  655.              FOR X := 1 TO Length(S) DO
  656.                  SendFile[X] := S[X];
  657.              FOR X := 1 TO Length(P) DO
  658.                  Phone[X] := P[X];
  659.              FillChar(TagField,SizeOf(TagField),#0);
  660.              Reserved1 := 0;
  661.              CoverFlag := 0;
  662.              FillChar(Reserved2,SizeOf(Reserved2),0);
  663.              FillChar(CoverPage,SizeOf(CoverPage),#0);
  664.         END;
  665.         WITH Regs DO
  666.         BEGIN
  667.              AH := MUX;
  668.              AL := $15;
  669.              DS := Seg(FDA^);
  670.              DX := Ofs(FDA^);
  671.              Intr($2F,Regs);
  672.              CASError := CheckError;
  673.         END;
  674.     END;
  675.  
  676.  
  677.     PROCEDURE RemoveManager;
  678.     {CAS Function 16h}
  679.     BEGIN
  680.         WITH Regs DO
  681.         BEGIN
  682.              AH := MUX;
  683.              AL := $16;
  684.              BX := $1234;
  685.              CX := $5678;
  686.              DX := $9ABC;
  687.              Intr($2F,Regs);
  688.              CASError := CheckError;
  689.         END;
  690.     END;
  691.  
  692.  
  693.     FUNCTION CreateControlFile(CFEvent : CFEventType;TransferType : BYTE;
  694.          CFRTime : WORD;CFRDate : WORD;NumFiles : INTEGER;Phone : Str47;
  695.          CoverPageFlag : BYTE;Destination : Str32;SenderName : Str32;
  696.          LogoName : Str80;VAR CoverPageText : CoverPageType) : FileName;
  697.     VAR
  698.        CFName : FileName;
  699.        TempName : String[8];
  700.        X,Y : BYTE;
  701.        F : LONGINT;
  702.     BEGIN
  703.          FillChar(CFName,SizeOf(CFName),#0);
  704.          FillChar(TempName,SizeOf(TempName),#0);
  705.          WITH Regs DO
  706.          BEGIN
  707.               AH := $5A;
  708.               CX := $00;
  709.               DS := Seg(TempName);
  710.               DX := Ofs(TempName);
  711.               MsDOS(Regs);
  712.          END;
  713.          CFName := CFName + TempName;
  714.          CFName[0] := CHR(8);
  715.          CFName := CFName + '.CAS';
  716.          Assign(ControlFile,CFName);
  717.          ReWrite(ControlFile,1);
  718.          NEW(CFR);
  719.          FillChar(CFR^,SizeOf(CFR^),#0);
  720.          WITH CFR^ DO
  721.          BEGIN
  722.               CASE CFEvent OF
  723.               CFSend : EventType := 0;
  724.               CFPolledsend : EventType := 2;
  725.               CFPolledReceive : EventType := 3;
  726.               END;
  727.               TransType := TransferType;
  728.               SendTime := CFRTime;
  729.               SendDate := CFRDate;
  730.               NumberOfFiles := NumFiles;
  731.               FTROffset := 383;
  732.               FOR X := 1 TO Length(Phone) DO
  733.                   PhoneNo[X] := Phone[X];
  734.               CoverFlag := CoverPageFlag;
  735.               FOR X := 1 TO Length(Destination) DO
  736.                   Dest[X] := Destination[X];
  737.               FOR X := 1 TO Length(SenderName) DO
  738.                   Sender[X] := SenderName[X];
  739.               FOR X := 1 TO Length(LogoName) DO
  740.                   PCXFile[X] := LogoName[X];
  741.               FOR X := 1 TO Length(MyName) DO
  742.                   TagField[X] := MyName[X];
  743.               Unused1 := 0;
  744.               CoverFlag := 0;
  745.          END;
  746.          BlockWrite(ControlFile,CFR^,SizeOf(CFR^));
  747.          FOR X := 1 TO 10 DO
  748.          BEGIN
  749.               NEW(FTR);
  750.               FillChar(FTR^,SizeOf(FTR^),#0);
  751.               WITH FTR^ DO
  752.               BEGIN
  753.                    IF FileList[X][0] <> #0 THEN
  754.                    BEGIN
  755.                    FOR Y := 1 TO Length(FileList[X]) DO
  756.                        FAXFileName[Y] := FileList[X,Y];
  757.                        TextSize := 0;
  758.                        Inches := CHR(0) ;
  759.                        BlockWrite(ControlFile,FTR^,SizeOf(FTR^));
  760.                    END;
  761.               END;
  762.               DISPOSE(FTR);
  763.          END;
  764.          Close(ControlFile);
  765.          CreateControlFile := CFName;
  766.     END;
  767.  
  768. FUNCTION DOSTime(Hour,Minutes,Seconds : WORD) : WORD;
  769. BEGIN
  770.      DOSTime := (Hour * 2048) + (Minutes * 32) + (Seconds DIV 2);
  771. END;
  772.  
  773. FUNCTION DOSDate(Month,Day,Year : WORD) : WORD;
  774. BEGIN
  775.      DOSDate := ((Year - 1980) * 512) + (Month * 32) + Day;
  776. END;
  777.  
  778.  
  779. BEGIN
  780. END.
  781.